package spring;

/**
 * @Author:Cjj
 * @Date:2025/4/24 15:40
 * @Spring中的IOC和AOP
 * @IOC控制反转
 * @AOP面向切面编程
 */
/**
 * @IOC控制反转
 * Spring中的IOC控制反转
 *
 * @AOP面向切面编程
 * 它们极大地提高了代码的可维护性和扩展性。
 */

/**
 * 1.IOC控制反转
 *  是一种设计思想,它将对象的创建 初始化 销毁等控制权从开发者手中转移到Spring容器中,
 *  从而实现了控制反转---->>>>  这种方式呢 可以使其降低代码的耦合度,提高代码的可维护性质。
 */

/**Spring实现IOC(控制反转)的三种方式
 * 1.IOC:也就是控制反转(将创建对象的实例控制权反转) 例：一个类A要调用另一个类B,本来应该在A
 * 里面创建B的实例的,但控制器在A手里。现在使用Spring了，有了IOC,控制权就不在A手里了,而是交
 * 到Spring容器里了。A要用到B,那么A就从Spring容器里取B的实例。
 **/
public class Spring {
    private Computer computer;

    public void Programmer(Computer computer){
        this.computer = computer;
    }

    public static void main(String[] args) {

        Computer computer1 = new Computer();
        computer1.coding();
    }


    /**
     * 关键点：在类前面加注解：@Component,在需要注入的类里面加注解：@Autowired,这样xml里面的自动扫描就会扫描到这些加了
     * 注解的类和属性,在实例化bean的时候,Spring容器会把加了@Component的类实例化;在实际运行时,会给加了@Autowired的属性
     * 注入对应的实例。
     *
     * Spring中的自动装配有哪些限制?
     * 1.如果使用了构造器注入或者setter注入,那么将覆盖自动装配的依赖关系。
     * 2.基本数据类型的值,字符串字面量,类字面量无法使用自动装配。
     * 3.如果一个类被@Component标注,那么这个类中的所有属性都可以使用自动装配。
     * 4.@Required:该依赖关系必须装配,否则将抛出异常。
     * 5.@Autowired:自动装配,默认按类型进行自动装配。
     * 6.@Qualifier:如果按类型自动装配时有不止一个匹配的类型,那么可以使用该注解指定名字来消除歧义。
     */
}

